#pragma once
#include "Event.hpp"
#include "InputManager.hpp"
#include "SystemInfo.hpp"

namespace Typhoon {
	class GameState {
	public:
		GameState();
		virtual ~GameState();

		virtual void Initialize() = 0;
		virtual void Update(float dt) = 0;
		virtual void Render() = 0;

		virtual void Entered();
		virtual void Exited();
		
		Event<GameState*> OnPush;

		void UpdateInput(void* input);

		SystemInfo* System;

		bool ShouldExit;

	protected:

		void Exit();
		void Push(GameState* state);

		InputManager InputManager;

	};
}